home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 5
/
Apprentice-Release5.iso
/
Source Code
/
C
/
Applications
/
Python 1.3.3
/
stdwin
/
Tools
/
getopt.c
< prev
next >
Wrap
Text File
|
1995-12-21
|
2KB
|
83 lines
/*LINTLIBRARY*/
#include "configure.h"
#ifdef THINK_C
#define SYSV
#endif
#ifdef SYSV
#define index strchr
#endif
#ifdef unix
#define NULL 0
#define EOF (-1)
#define ERR(s, c) if(opterr){\
extern int strlen(), write();\
char errbuf[2];\
errbuf[0] = c; errbuf[1] = '\n';\
(void) write(2, argv[0], (int)strlen(argv[0]));\
(void) write(2, s, (int)strlen(s));\
(void) write(2, errbuf, 2);}
#else
/* Not unix -- assume <stdio.h> works, don't expect write(2). */
#include <stdio.h>
#define ERR(str, chr) if(opterr){\
fprintf(stderr, "%s%s%c\n", argv[0], str, chr); }
#endif
extern int strcmp();
extern char *index();
int opterr = 1;
int optind = 1;
int optopt;
char *optarg;
int
getopt(argc, argv, opts)
int argc;
char **argv, *opts;
{
static int sp = 1;
register int c;
register char *cp;
if(sp == 1)
if(optind >= argc ||
argv[optind][0] != '-' || argv[optind][1] == '\0')
return(EOF);
else if(strcmp(argv[optind], "--") == 0) {
optind++;
return(EOF);
}
optopt = c = argv[optind][sp];
if(c == ':' || (cp=index(opts, c)) == NULL) {
ERR(": illegal option -- ", c);
if(argv[optind][++sp] == '\0') {
optind++;
sp = 1;
}
return('?');
}
if(*++cp == ':') {
if(argv[optind][sp+1] != '\0')
optarg = &argv[optind++][sp+1];
else if(++optind >= argc) {
ERR(": option requires an argument -- ", c);
sp = 1;
return('?');
} else
optarg = argv[optind++];
sp = 1;
} else {
if(argv[optind][++sp] == '\0') {
sp = 1;
optind++;
}
optarg = NULL;
}
return(c);
}